package com.geovis.emergency.spd.biz.system.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.geovis.common.file.dto.UploadDTO;
import com.geovis.common.mybatis.page.PageParam;
import com.geovis.common.mybatis.page.PageResult;
import com.geovis.emergency.spd.entity.pc.pojo.vo.PcPlanDetailVO;
import com.geovis.emergency.spd.entity.system.entity.SystemFile;
import com.geovis.emergency.spd.entity.system.pojo.dto.SystemFileDTO;
import com.geovis.emergency.spd.entity.system.pojo.dto.SystemFileQueryDTO;
import com.geovis.emergency.spd.entity.system.pojo.dto.SystemFileSaveDTO;
import com.geovis.emergency.spd.entity.system.pojo.dto.SystemFileUploadDTO;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 附件表 服务类
 * </p>
 *
 * @author 曾德实
 * @since 2020-09-01
 */
public interface ISystemFileService extends IService<SystemFile> {

    /**
     * 文件上传
     *
     * @param uploadDTO
     * @return
     */
    SystemFile upload(SystemFileUploadDTO uploadDTO);

    /**
     * 保存
     *
     * @param saveDTO 上传文件对象
     */
    void save(SystemFileSaveDTO saveDTO);


    /**
     * 将预案备案文件插入到预案系统
     */
    void saveFromFiling(PcPlanDetailVO detailVO);

    /**
     * 文件合并
     *
     * @param list       要合并的文件
     * @param systemFile 合并到的新文件
     * @return
     */
    SystemFile mergeChunk(List<SystemFile> list, SystemFile systemFile);

    /**
     * 分页查询附件列表
     *
     * @param pageParam
     * @return
     */
    PageResult<SystemFile> listPage(PageParam<SystemFileQueryDTO> pageParam);


    /**
     * 根据条件查询
     *
     * @param queryDTO
     * @return
     */
    List<SystemFileDTO> getList(SystemFileQueryDTO queryDTO);

    /**
     * 根据事件消息id获取文件
     */
    List<SystemFile> getListById(String relatedId,String type);

    /**
     * void
     * 附件删除
     *
     * @param idList 删除的id列表
     */
    void removeByIdList(Set<String> idList);

    /**
     * 设置附件业务表和附件表关联起来
     *
     * @param fileIdList
     * @param param
     */
    void linkBusiness(List<String> fileIdList, String... param);

    void linkBusiness(List<SystemFile> fileList, String relatedId, String type);

    /**
     * 根据param 删除
     *
     * @param param
     */
    void removeByParam(String... param);

    /**
     * 检查该片段或文件是否已经上传
     *
     * @param dto 上传对象
     * @return 检查文件是否存在
     */
    boolean checkUpload(UploadDTO dto);

    /**
     * 图片生成缩略图
     *
     * @param systemFile
     * @param width
     * @param height
     * @return
     */
    SystemFile generateThumbnail(SystemFile systemFile, int width, int height);

}
